Composite indexes can be on simple types. A query can be performed on an exact match or by partial matches of items inside.
C# Example:
NinjaDbPro db = new NinjaDbPro("CompositeIndexExampleDir", "CompositeIndexExampleDir.db");
//Licensed Mode
//db.UserName = "John Smith 101224"; //db.LicenseKey = "aousdf832jasf=="; //Set before OpenDatabase. Default storage is IsolatedStorageDatabase. Other options are: //db.Storage = new MemoryDatabase(); //In memory database //db.Storage = new FileDatabase(); //Valid only for non Silverlight projects//Open the database
db.OpenDatabase();
//Add a single property index if it doesn't already exist if (!db.IndexExists<Person>("NameCreatedIndex"))
{
List<string> indexProperties = new List<string>();
indexProperties.Add(
"Name");indexProperties.Add(
"DateCreated");db.AddCompositeIndex<
Person>("NameCreatedIndex", indexProperties,IndexStyle.NonUnique);}
//Add a record to the database Person person = new Person();
person.Name =
"John Smith";person.DateCreated =
DateTime.Now;db.Save(person);
//Build the index to find. This has to be in the same order as the index List<object> indexValues = new List<object>();
indexValues.Add(person.Name);
indexValues.Add(person.DateCreated);
//Find an exact matach. If the index is unique, this is the fastest. var exactQuery = db.CreateCompositeIndexQuery<Person>("NameCreatedIndex", indexValues);
//Lazy load the first record and write out a property
Console.WriteLine(exactQuery[0].LazyValue.DateCreated);
//Find a partial match
var partialQuery = db.CreateCompositeIndexQuery<Person>("NameCreatedIndex").Where(o => o.Indexes[0].ToString().StartsWith("John"));
//Write the DateCreated for all records that have a name beginning with John
foreach (var indexRecord in partialQuery){
Console.WriteLine(indexRecord.LazyValue.DateCreated);}
//Close the database
db.CloseDatabase();